SM2加密也是有2個人A和B,
首先A的回合(加密)
A會選擇一個隨機數k
這個k的值在1到n-1之間,包含1和n-1,n是基點G的order(階),意思是nG會等於無窮遠點。
A計算C1=kG=(x1,y1)
類似A在為了這個加密而做的公鑰,公鑰和昨日說的一樣是座標。
A計算S=hPB
h是橢圓曲線點的數量去除以n,PB是B的公鑰。
A計算kPB=(x2,y2)
A計算t=KDF(x_2∥y_2,klen)
KDF就是金鑰派生函數,klen是指訊息M的長度。
A計算C_2=M⨁t
很常使用訊息xor機密,這樣解密就能得到訊息M。
A計算C_3=H(x_2∥M∥y_2)
C3是做訊息驗證用的。
A把C=C_1∥C_2∥C_3給B
B的回合(解密)
B驗證C1是不是ECC的方程式
B計算S=hC_1
B計算d_B C_1=(x_2,y_2)
這邊是很常會用到的技巧,公鑰和私鑰的搭配。
B計算t=KDF(x_2∥y_2,klen)
B計算M^'=C_2⨁t
就如前面說的一樣,xor可以拿到訊息。
B計算u=H(x_2∥M'∥y_2)
B檢查u=C_3
B得到M’
加解密就這樣結束了,C1是公鑰加密、私密解密的技巧,C2是訊息保護,C3是驗證訊息用的。